#include "campeonato.h"
#include <algorithm>

using namespace std;

#define LIMITE_MAXIMO_EQUIPA 15


Campeonato::Campeonato(int year) : ano(year), limite_maximo_de_equipas(LIMITE_MAXIMO_EQUIPA)
{
    lista_equipas.reserve(100);
    lista_jogos.reserve(100);
}

Campeonato::Campeonato(int year, vector<Equipa*> equipas) : ano(year), limite_maximo_de_equipas(LIMITE_MAXIMO_EQUIPA)
{
    if (equipas.size() > limite_maximo_de_equipas)
        throw LugaresInsuficientes();
    else
        for (vector<Equipa_temporada>::size_type k = 0; k != equipas.size(); k++) {
            Equipa_temporada temp(equipas[k]);
            lista_equipas.push_back(temp);
        }
}

bool Campeonato::adicionarEquipa(Equipa* equipa)
{
    if (lista_equipas.size() >= limite_maximo_de_equipas)
        throw CampeonatoCheio();
    else {
        Equipa_temporada temp_adiciona(equipa);
        lista_equipas.push_back(temp_adiciona);
    }


    return true;
}

bool Campeonato::adicionarJogo(Jogo* jogo)
{
    // TODO: Fazer uma excepcao como o CampeonatoCheio mas para os jogos
    lista_jogos.push_back(jogo);

    return true;
}

const int Campeonato::getAno()
{
    return ano;
}
int Campeonato::getNumeroEquipas()
{
    return lista_equipas.size();
}

int Campeonato::getNumeroJogos()
{
    return lista_jogos.size();
}


void Campeonato::imprimir()
{
    for (vector<Equipa_temporada>::size_type k = 0; k != lista_equipas.size(); k++) {
        lista_equipas[k].imprimir();
        cout << endl;
    }
}

vector<Equipa> Campeonato::getEquipas()
{
    vector<Equipa> vector_devolver;

    for (vector<Equipa_temporada>::iterator k = lista_equipas.begin(); k != lista_equipas.end(); k++) {
        vector_devolver.push_back(k->getEquipa());
    }

    return vector_devolver;
}

vector<Equipa*> Campeonato::getEquipas2()
{
    vector<Equipa*> vector_devolver;

    for (vector<Equipa_temporada>::size_type k = 0; k != lista_equipas.size(); k++) {
        vector_devolver.push_back(lista_equipas[k].getEquipa2());
    }

    return vector_devolver;
}

vector<Jogo*> Campeonato::getJogos()
{
    return lista_jogos;

    // vector<Jogo> vector_devolver;

    // for (vector<Jogo*>::iterator k = lista_jogos.begin(); k != lista_jogos.end(); k++) {
    //     Jogo* ptr_jogo = *k;

    //     vector_devolver.push_back(*ptr_jogo);
    // }

    // return vector_devolver;
}
